import { createRouter, createWebHistory } from 'vue-router'
import NProgress from 'nprogress'; // progress bar
import packageJson from '../../package.json';
//创建路由器
const router = createRouter({
  history: createWebHistory(`/${packageJson.name}-${packageJson.version}`),//路由器的工作模式
  routes: [//一个一个的路由规则
    // 一级路由
    { path: '/', redirect: '/login' },
    {
      name: 'Login',
      path: '/login',//路径
      component: () => import('@/views/Login.vue')
    },
    {
      name: 'Home',
      path: '/home',//路径
      component: () => import('@/layout/Home.vue'),
      redirect: '/welcome',
      children: [{
        name: 'Welcome',
        path: '/welcome',//路径
        component: () => import('@/views/Welcome.vue')
      }, {
        name: 'User',
        path: '/user/users',//路径
        component: () => import('@/views/user/Users.vue')
      }, {
        name: 'ErrorInfo',
        path: '/error-info',
        component: () => import('@/views/ErrorInfo.vue')
      }
      ]
    },
    { path: '/:catchAll(.*)', redirect: '/error-info' }
  ]
})
// 挂载路由导航守卫
router.beforeEach((to, from, next) => {
  NProgress.start()
  // 每次路由跳转之前都会执行
  // to:即将要进入的目标路由对象
  // from:当前导航正要离开的路由
  // next:是一个函数，调用next()表示放行，允许这次路由跳转，调用next('/login')表示中断当前路由，跳转到'/login'
  const tokenStr = window.sessionStorage.getItem('token')
  if (to.path !== '/login' && !tokenStr) {
    next('/login')
  } else {
    next()
  }
})
router.afterEach(() => {
  // finish progress bar
  NProgress.done()
})
// 添加错误处理器
router.onError((error) => {
  // 在这里处理错误，比如路由到自定义的404组件
  console.error('路由错误:', error);
  // 可以根据错误类型进行更多的处理，例如路由到404页面
  // router.push('/404');
});
export default router
